<?php

namespace framework\support;

class Request
{
    private static $_instance = null;
    private static $data = [];
    /**
     * Single constructor. 私有的构造方法
     */
    private function __construct()
    {;
    }

    /**
     * @purpose: 创建__clone方法防止对象被复制克隆
     */
    private function __clone()
    {
        // E_USER_ERROR只能通过trigger_error($msg, E_USER_ERROR)手动触发。
        // E_USER_ERROR是用户自定义错误类型，可以被set_error_handler错误处理函数捕获，允许程序继续运行。
        // E_ERROR是系统错误，不能被set_error_handler错误处理函数捕获，程序会退出运行
        trigger_error('Clone is not allow!', E_USER_ERROR);
    }

    /**
     * @return Single|Object 单例方法,用于访问实例的公共的静态方法
     */
    public static function getInstance()
    {
        if (!(self::$_instance instanceof self)) {
            self::$_instance = new self;
        }
        return self::$_instance;
    }

    public function __set($name, $value)
    {
        self::$data[$name] = $value;
    }


    public function __get($name)
    {
        return self::$data[$name];
    }

    public static function get($name, $default = null)
    {
        return $_GET[$name] ?? $default;
    }

    public static function post($name, $default = null)
    {
        return $_POST[$name] ?? $default;
    }

    public static function header($name)
    {
        $headers = getallheaders();
        return $headers[$name];
    }
}
